package com.yanqu.road.logic.helper;

import com.yanqu.road.entity.activity.ActivityInfo;
import com.yanqu.road.entity.enums.eUnionActivityGroupType;
import com.yanqu.road.utils.date.DateHelper;
import com.yanqu.road.utils.string.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class UnionActivityGroupHelper {

    public static final int NO_GROUP_ID = -1; // 无分组的分组ID（不能进行活动）
    public static final int NO_NEED_GROUP_ID = 0; // 无需分组的分组ID（可以进行活动）
    public static final int NEED_GROUP_FIRST_ID = 1; // 需要分组活动的首个分组ID

    public static List<Integer> getActivityTypeList() {
        List<Integer> list = new ArrayList<>();
        for (eUnionActivityGroupType type : eUnionActivityGroupType.values()) {
            list.add(type.getActivityType());
        }
        return list;
    }

    public static boolean isGroupActivityType(int activityType) {
        return eUnionActivityGroupType.getType(activityType) != null;
    }

    public static long getGroupTime(ActivityInfo activityInfo) {
        eUnionActivityGroupType type = eUnionActivityGroupType.getType(activityInfo.getType());
        if (type == null) {
            return Long.MAX_VALUE; // 活动类型不对
        }
        if(!type.isAppointGroupTime()) {
            return activityInfo.getBeginShowTime() * 1000 - DateHelper.MINUTE_MILLIONS * 10; // 不需要指定分组时间：活动开始前10分钟分组
        }
        if (!needGroup(activityInfo) && !type.isLockMember()) {//非锁名单并且不需要分组的,也活动前10分组分组
            return activityInfo.getBeginShowTime() * 1000 - DateHelper.MINUTE_MILLIONS * 10;
        }
        List<Integer> groupParamList = StringUtils.stringToIntegerList(activityInfo.getUnionGroup(), "\\|");
        if (groupParamList.size() < 3) {
            return Long.MAX_VALUE; // 配置长度错了
        }
        return activityInfo.getBeginShowTime() * 1000 + groupParamList.get(2) * DateHelper.MINUTE_MILLIONS; // 使用指定分组时间
    }

    public static int getGroupNum(ActivityInfo activityInfo) {
        return Integer.valueOf(activityInfo.getUnionGroup().split("\\|")[0]);
    }

    /**
     * 获取每个商会实际分组人数（商会数量不够时，达不到配置的数量）
     */
    public static int getRealGroupUnionNum(ActivityInfo activityInfo, int totalUnionNum) {
        eUnionActivityGroupType type = eUnionActivityGroupType.getType(activityInfo.getType());
        if (type == null) {
            return 0; // 类型错了
        }
        // 配置值
        int unionNum = Integer.MAX_VALUE;
        if (type.isLimitUnionNum()) {
            unionNum = Integer.valueOf(activityInfo.getUnionGroup().split("\\|")[1]);
        }
        // 实际最大值
        int groupNum = getGroupNum(activityInfo);
        int maxUnionNum = totalUnionNum / groupNum + (totalUnionNum % groupNum > 0 ? 1 : 0);
        // 取低的
        return Math.min(maxUnionNum, unionNum);
    }

    public static boolean needGroup(ActivityInfo info) {
        if (eUnionActivityGroupType.getType(info.getType()) == null) {
            return false;
        }
        String unionGroup = info.getUnionGroup();
        if (StringUtils.isNullOrEmpty(unionGroup) || "0".equals(unionGroup)) {
            return false;
        }
        List<Integer> list = StringUtils.stringToIntegerList(unionGroup, "\\|");
        if (list.get(0) <= 1) {
            return false;
        }
        return true;
    }

}
